javascript 对象的 可写性,可枚举性,可配置性

可写性(writable):是否可为属性赋予新值。 可枚举性(enumerable): 是否可以用for…in、Object.keys( )循环遍历出,是否可以使用JSON.stringify() 序列化为json格式,若不可枚举,仍可访问。 可配置性(configurable):是否可以修改对象属性的行为。只有可配置的对象才可以delete 删除掉。可以使用Object.definedProperty()定义是否可写、可枚举。若不可配置,只可以将对象的可写性(writable) 由true改为false。

  • 创建对象并定义其属性描述:
    • var tempObj = Object.create(Object.prototype, {

a: { writable: true, enumerable: true, value: 1 }, b: { enumerable: true, value: 2 } });


  • 检测属性:
    • var tempObj = { a:1};
    • var r = ‘a’;
      1. if( tempObj.a ){…}
      2. if( tempObj[r] ){…}
      3. if( ‘a’ in tempObj ){..}
      4. if( r in tempObj ){..}
      5. if( tempObj.hasOwnProperty(‘a’) ){…}
      6. if( tempObj.hasOwnProperty(r) ){…}
      7. if( tempObj.propertyIsEnumerable(‘a’)){…}
      8. if( tempObj.hasOwnProperty(r) ){…}

  • 设置属性:
    • Object.defineProperty(tempObj, ‘a’, {

value: 222, enumerable: false, writable: false, configurable: false });


  • 获取属性描述:
    • Object.getOwnPropertyDescriptor(tempObj, ‘a’);

获取对象所有自有属性名: Object.getOwnPropertyNames(); Object.keys();(获取可枚举键); for…in;(获取可枚举键);